package cls.generictype.kmvp

import kotlin.reflect.KClass

open class BasePresenter<out V, out M>(val view :V) {

//    val view: V by lazy {
//        (this::class
//                .supertypes.first() // 类 A 的 KType
//                .arguments.first() // T 的泛型实参
//                .type!!.classifier as KClass<*>)
//                .java.newInstance() as V
//    }

    //Kotlin的反射超级慢，官方说暂时不会优化，可以使用java替代
    val model: M by lazy {
        (this::class.supertypes.first()
                .arguments.last().type!!.classifier as KClass<*>)
                .java.newInstance() as M
    }

    init {
        println("BasePresenter")
    }

}